﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//添加引用
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace WebApplication1
{
    /// <summary>
    ///  DBUnit（数据库连接类）的摘要说明
    /// </summary>
    public static class DBUnit
    {
        /// <summary>
        /// ConnectionStrings["SQLConn"]属性的键"SQLConn"是web.config配置文件的键
        /// </summary>
        public static readonly string ConnStr = ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString;

        /// <summary>
        /// 根据存储过程，获得结果集
        /// </summary>
        /// <param name="procName">存储过程名称或者完整的SQL语句</param>
        /// <returns></returns>
        public static DataSet GetDataSetByProc(string procName)
        {
            //初始化数据集
            DataSet ds = new DataSet();

            //获取数据库连接字符串
            string strConn = DBUnit.ConnStr;
            //获取数据库连接对象
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                ///获取填充 数据集的适配器 
                ///procName是存储过程名称,conn是连接对象
                using (SqlDataAdapter sda = new SqlDataAdapter(procName, conn))
                {
                    //调用Fill()存储过程的结果填充到 DataSet数据集
                    sda.Fill(ds);
                }
            }
            return ds;
        }

        /// <summary>
        /// 根据 数据库连接字符串，获得数据库 SqlDataReader对象
        /// </summary>
        /// <param name="strConn"> 数据库连接字符串</param>
        /// <returns></returns>
        public static SqlDataReader GetSqlDataReader(SqlConnection conn)
        {
            //切记不能使用using关键字，因为SqlDataReader在读取数据过程，是保持连接的
            //解决机制：提供一个显示的关闭数据库的方法
           
            try
            {
                //必须打开数据库连接
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                //设置T-SQL操作语句，可以直接SQL语句，也可以是存储过程名称
                cmd.CommandText = "Pr_GetCategorys";

                //显示指定连接SQL连接对象
                cmd.Connection = conn;

                //创建SQL 只读流对象
                SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                return sdr;
            }
            catch (Exception )
            {
                conn.Close();
            }
            return null;
        }
     
        /// <summary>
        /// /关闭指定数据库连接对象
        /// </summary>
        /// <param name="conn"></param>
        public static void CloseSQLConn(SqlConnection conn)
        {
            if (conn.State == ConnectionState.Broken)
            {
                conn.Close();
                conn.Dispose();
            }
            else if (conn.State != ConnectionState.Open)
            {
                conn.Close();
                conn.Dispose();
            }
        }

    }
}